//package com.xiu.travel.config;
//
//import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
//import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner;
//import com.wechat.pay.contrib.apache.httpclient.auth.Verifier;
//import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials;
//import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator;
//import com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager;
//import com.wechat.pay.contrib.apache.httpclient.exception.HttpCodeException;
//import com.wechat.pay.contrib.apache.httpclient.exception.NotFoundException;
//import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.IOException;
//import java.nio.charset.StandardCharsets;
//import java.security.GeneralSecurityException;
//import java.security.PrivateKey;
//
///**
// * @author 2023
// */
//@Configuration
//public class WxPayConfig
//{
//
//    @Value("${wechat.mchid}")
//    private String MCHID;
//    @Value("${wechat.appid[0]}")
//    private String APPID;
//    @Value("${wechat.mch.certno}")
//    private String MCHSERIALNO;
//    @Value("${wechat.pay.api-v3-key}")
//    private String V3KEY;
//    // 商户私钥文件
//    @Value("${wechat.private-key-path}")
//    private String PRIVATEKEYPATH;
//
//    // 微信服务器地址
//    private String DOMAIN;
//
//    // 接收结果通知地址
//    private String NOTIFYDOMAIN;
//
//    /**
//     * 获取商户的私钥文件
//     *
//     * @param filename 证书地址
//     * @return 私钥文件
//     */
//    public PrivateKey getPrivateKey(String filename) throws Exception
//    {
//        try {
//            return PemUtil.loadPrivateKey(new FileInputStream(filename));
//        } catch (FileNotFoundException e) {
//            throw new Exception("私钥文件不存在");
//        }
//    }
//
//
//    /**
//     * 获取签名验证器
//     */
//    @Bean
//    public Verifier getVerifier() throws Exception
//    {
//        // 获取商户私钥
//        final PrivateKey privateKey = getPrivateKey(PRIVATEKEYPATH);
//
//        // 私钥签名对象
//        PrivateKeySigner privateKeySigner = new PrivateKeySigner(MCHSERIALNO, privateKey);
//
//        // 身份认证对象
//        WechatPay2Credentials wechatPay2Credentials = new WechatPay2Credentials(MCHID, privateKeySigner);
//
//        // 获取证书管理器实例
//        CertificatesManager certificatesManager = CertificatesManager.getInstance();
//
//        try {
//            // 向证书管理器增加需要自动更新平台证书的商户信息
//            certificatesManager.putMerchant(MCHID, wechatPay2Credentials, V3KEY.getBytes(StandardCharsets.UTF_8));
//        } catch (IOException | GeneralSecurityException | HttpCodeException e) {
//            e.printStackTrace();
//        }
//
//        try {
//            return certificatesManager.getVerifier(MCHID);
//        } catch (NotFoundException e) {
//            e.printStackTrace();
//            throw new Exception("获取签名验证器失败");
//        }
//    }
//
//    /**
//     * 获取微信支付的远程请求对象
//     *
//     * @return Http请求对象
//     */
//    @Bean
//    public CloseableHttpClient getWxPayClient() throws Exception
//    {
//
//        // 获取签名验证器
//        Verifier verifier = getVerifier();
//
//        // 获取商户私钥
//        final PrivateKey privateKey = getPrivateKey(PRIVATEKEYPATH);
//
//        WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create().withMerchant(MCHID, MCHSERIALNO, privateKey)
//                .withValidator(new WechatPay2Validator(verifier));
//
//        return builder.build();
//    }
//
//
//}
